<template>
  <div
    class="theme-toggle"
    :title="isDark ? '切换到亮色模式' : '切换到暗黑模式'"
    @click="toggleDark()"
  >
    <a-float-button
      type="primary"
      :style="{
        right: '24px',
        bottom: '100px',
      }"
    >
      <template #icon>
        <svg
          v-if="isDark"
          xmlns="http://www.w3.org/2000/svg"
          aria-hidden="true"
          focusable="false"
          viewBox="0 0 24 24"
          fill="#fff"
        >
          <path
            d="M12,18c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6S15.3,18,12,18zM12,8c-2.2,0-4,1.8-4,4c0,2.2,1.8,4,4,4c2.2,0,4-1.8,4-4C16,9.8,14.2,8,12,8z"
          />
          <path
            d="M12,4c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,3.6,12.6,4,12,4z"
          />
          <path
            d="M12,24c-0.6,0-1-0.4-1-1v-2c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,23.6,12.6,24,12,24z"
          />
          <path
            d="M5.6,6.6c-0.3,0-0.5-0.1-0.7-0.3L3.5,4.9c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C6.2,6.5,5.9,6.6,5.6,6.6z"
          />
          <path
            d="M19.8,20.8c-0.3,0-0.5-0.1-0.7-0.3l-1.4-1.4c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C20.3,20.7,20,20.8,19.8,20.8z"
          />
          <path
            d="M3,13H1c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S3.6,13,3,13z"
          />
          <path
            d="M23,13h-2c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S23.6,13,23,13z"
          />
          <path
            d="M4.2,20.8c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C4.7,20.7,4.5,20.8,4.2,20.8z"
          />
          <path
            d="M18.4,6.6c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C18.9,6.5,18.6,6.6,18.4,6.6z"
          />
        </svg>
        <svg
          v-else
          xmlns="http://www.w3.org/2000/svg"
          aria-hidden="true"
          focusable="false"
          viewBox="0 0 24 24"
          class="vt-switch-appearance-moon"
          fill="#fff"
        >
          <path
            d="M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"
          />
        </svg>
      </template>
    </a-float-button>
  </div>
</template>

<script setup lang="ts">
/**
 * 主题切换组件脚本
 * 提供暗黑模式和亮色模式之间的切换功能
 * 使用VueUse的useDark和useToggle组合式函数
 */

// 导入VueUse的主题相关工具函数
import { useDark, useToggle } from "@vueuse/core";

/**
 * 暗黑模式状态管理
 * 使用useDark管理主题的暗黑/亮色状态
 * 配置项说明：
 * - selector: 应用主题选择器的DOM元素
 * - attribute: 主题属性名
 * - valueDark: 暗黑模式时的属性值
 * - valueLight: 亮色模式时的属性值
 * - storageKey: 本地存储的键名，用于持久化主题设置
 */
const isDark = useDark({
  selector: "html",        // 将主题类应用到html元素
  attribute: "class",      // 使用class属性来切换主题
  valueDark: "dark",       // 暗黑模式时添加'dark'类
  valueLight: "",          // 亮色模式时不添加类
  storageKey: "theme-mode", // 使用localStorage存储用户主题偏好
});

/**
 * 主题切换函数
 * 使用useToggle创建切换函数，在暗黑和亮色模式之间切换
 */
const toggleDark = useToggle(isDark);
</script>

<style lang="less" scoped>
.theme-toggle {
  position: fixed;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  cursor: pointer;
  transition: all 0.3s;
  font-size: 18px;
  color: #fff;
}
</style>
